בניתי מערכת ניהול ובתוכה יש אפשרות להוסיף לינקים שיוצגו באתר.
הבעיה היא שהשרת לא מאפשר לי להכניס לDB קישורים. אני מבין שזו פרצת אבטחה ולכן השרת מונע זאת.
אבל מהיא החלופה, איך אני יכול להעלות לינקים דרך המערכת ניהול מבלי שיסורבו ע"י השרת.
יש לי גם בעיה דומה עם קוד של פלאש שאני רוצה להעלות לאתר!
מודה מראש לעוזרים!
21 תשובות
מוזר, בד"כ השרת לא צריך להתערב באבטחת הסקריפט.
תנסה את זה:
<input type="url" name="my_url" value="http://www.foo.ltd" />
<input type="submit" value="test" />
</form>
ותגיד אם אתה עדיין מקבל fordidden..
השרת בעצמו לא מונע שום דבר, אלה אם כן מותקן עליו איזשהו תוסף mod כלשהו שעושה את זה, למרות שאני בספק ולא ראיתי כאלה. forbidden בדרך כלל מסמל את זה שאין לקוד הרשאות לקרוא קובץ מסוים או למשתמש לגשת לכתובת מסוימת ולא קשור לא לטפסים ולא לתוכן שלהם.
ובטח שלא אם אתה עובד על לוקאל הוסט.
ככה שאני לא חושב שההבחנה שלך לגבי הסיבה היא מדויקת.
תתאר בבקשה את הבעיה, מה אתמה מנסה להזין, באיזה שרת מדובר.
יעזור אם תצרף את הקוד שלך ואת התוכן של phpinfo
עדיין נותן את הודעת ה
fordidden
You don't have permission to access /admin/pages/update/add_link.php on this server.
בתחתית האתר שני בונה כרגע, יש שורת לינקים שמנהל האתר רוצה לשלוט עליהם.
לכן יצרתי לו טופס המאפשר להעלות לינקים לאותה שורה, דרך פאנל ניהול האתר.
השרת הוא שרת לינוקס.
ניסיתי לשנות את ההרשאות, וזה עדיין לא מעלה.
זו לא פעם ראשונה שאני נתקל בזה, גם בשרת הקודם שהייתי, היה אותו סיפור, התמיכה של השרת אמרו שיש להם MOD SECURITY, ושזו החלטה שלי אם להשאיר אותו
יכול להיות שרעיון טוב יהיה להוריד אותו. יש סיכוי שהוא זה שגורם לך לכל הבעיות.
לא, השרתים באים בלי זה וזה תוסף שהותקן על ידי חברת האחסון בנפרד.
כשמתקינים כזה לשימוש אישי בדרך כלל מקנפגים אותו בעת ההתקנה. חברות האחסון לא שמות כזה כי אי אפשר לקנפג אותו פר משתמש. שלך הראשונים שאני שומע שעושים את זה.
mysql_query("SET NAMES 'utf8'");
$result=mysql_query($query);
if(!$result)
return false;
else
return true;
זה הQUERY שמעלה את הקישור לDB.
למשתנים אני עושה לפני STR_REPLACE.
יש דרך אחרת לעשות את זה?
כמובן. השבוע זה הפעם ה11 שאני נותן קישור לזה.
בדיוק באמצע המסך - הגנה מפני sql injection החלק על mysql_real_escape_string
חברה הבעיה עדיין לא נפתרה, קראתי את המאמר על sql injectio, והוספתי
לפני השאילתא
mysql_query("SET NAMES 'utf8'");
$result=mysql_query($query);
if(!$result)
return false;
else
return true;
למרות זאת עדיין לא עובד!, מראה לי שוב את ההודעה הבאה:
You don't have permission to access /admin/***/****/*****.php on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
וזה קורה תמיד, לא משנה מה אתה כותב בשדות של הטופס?
אין שם איזשהו include לאיזה קובץ שאין עליו הרשות? תנסה לשים 777 על כל התיקיות והקבצים בתוכם לצורך בדיקה? לא נראה לי ש mod_security הוא זה שעושה את הבעיות.
+ הוספת mysql_real_escape_string למשתנה אחד. גם לשני הוספת?
כן תמיד זה קורה, ואין שום include.
זה הקובץ במלואו:
1. טופס:
<td colspan="2">שם: <input type="text" name="add_lin_name" /></td>
<td colspan="2">כתובת: <input type="text" name="add_lin_src" /></td>
<td><input type="submit" value="הוסף קישור"/></td>
</form>
2. add_link.php:
include "../../../connect_to_db.php";
include "../../../functions.php";
$add_lin_name = mysql_real_escape_string($_POST['add_lin_name']);
$add_lin_src = mysql_real_escape_string($_POST['add_lin_src']);
$insert_result = insert_new_link($add_lin_name, $add_lin_src);
function insert_new_link($add_lin_name, $add_lin_src){
$query="INSERT INTO bottom_links (lin_name ,lin_src, lin_stat) VALUES ('".$add_lin_name."','".$add_lin_src."','hide')";
mysql_query("SET NAMES 'utf8'");
$result=mysql_query($query);
if(!$result)
return false;
else
return true;
}
if($insert_result == false)
die('Something is wrong');
else
{
$_SESSION['update_link'] = 'OK';
header('Location:'.$last_page);
}
?>
תנסה גם להוסיף ל htaccess את השורות
# Turn off mod_security filtering.
SecFilterEngine Off
# The below probably isn't needed, but better safe than sorry.
SecFilterScanPOST Off
</IfModule
גם לא עובד!
הזוי הנושא הזה, האם יש חלופות לפעולה הזאת?